机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)
本例采用几个无监督学习技术,从股票的历史报价变异里提取股票市场结构。这里,我们使用的数量是每日的报价变异。
学习一个图结构
我们使用稀疏的可逆协方差估计寻找哪些报价是条件相关的,即,给定其它报价下,它们是相关的。特别地,稀疏的可逆协方差估计给出了一个图,这个图实际上是一个报价的连接表。对于每一个标记(即报价),与之连接的标记对解释它的波动情况是有用的。
聚类
我们使用聚类的方法将相似的报价分到一起。具体地,我们使用AP聚类法(Affinity propagation Clustering). AP不要求各类大小相等,而且能根据数据自动确定类数。
聚类与图的区别在于,图反映了变量间的条件关系,而聚类反映了边际属性,即,被聚在一起的变量对完全的股票市场有相似的影响。
可视化
我们在一个2D图里同时输出3个模型,图中的节点代表股票,边代表:
-
类标签被用来定义节点的颜色
-
稀疏的协方差模型被用来表示节点力
-
2D嵌入被用来表示节点的位置
这个例子涉及大量的可视化代码,因为可视化对于图形表示是重要的。挑战之一是如何定位标签的位置,使重叠最少,这样图形更清楚可见。为此,我们沿着每个轴的最近邻方向使用一个启发式的方法。
实例详解
首先,加载必需的模块和函数库。
from __future__ import print_function
# Author: Gael Varoquaux gael.varoquaux@normalesup.org
# License: BSD 3 clause
import sys
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import pandas as pd
from sklearn import cluster, covariance, manifold
print(__doc__)
从因特网获得数据
本例使用的数据来自2003年——2008年的股票市场历史资料。这种历史数据能够从quandl.com
,
alphavantage.co
这样的API获得。我们将获得的数据定义成一个数组对象,定义股票变异为收盘价与开盘价的差。
# The data is from 2003 - 2008. This is reasonably calm: (not too long ago so
# that we get high-tech firms, and before the 2008 crash). This kind of
# historical data can be